package org.jeecg.common.util;

import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

public class RandomMaterial {

	public  static List<List<TestDTO>>  Test(List<TestDTO> dtoParam,Integer samplesNumber) {
		List<List<TestDTO>>  reust = new ArrayList<List<TestDTO>>();
		int a=1;
		int c=1;
		List<TestDTO> d=null;
		for (int i = 0; i < dtoParam.size(); i++) {
			int s =  dtoParam.get(i).getNum();
			StringBuffer   str=new StringBuffer(dtoParam.get(i).getNum()+"+");//用于控制台打印显示，和逻辑无关
			boolean bb=true;
			while(bb){
				if(bb=false){
					break;
				}
				if(dtoParam.size()==a){
					bb=false;
					break;
				}
				boolean b=true;
				while(b){
					if(dtoParam.size()==c){
						a++;
						b=false;
						c=a;
						break;
					}
					d = new ArrayList<TestDTO>();
					d.add(dtoParam.get(i));
					for(int j=c;j<dtoParam.size();j++){
						s = s + dtoParam.get(j).getNum();
						d.add(dtoParam.get(j));
						str.append(dtoParam.get(j).getNum()+"+");//用于控制台打印显示，和逻辑无关
						System.out.println(str.substring(0,str.length()-1));//用于控制台打印显示，和逻辑无关
						if (s == samplesNumber) {
							reust.add(d);
							break;
						}
						if(dtoParam.size()-j==1){
							s =  dtoParam.get(i).getNum();
							str=new StringBuffer(dtoParam.get(i).getNum()+"+");//用于控制台打印显示，和逻辑无关
							c++;
							break;
						}
					}
				}
			}
		}
		return  reust;
	}

	public  static List<List<TestDTO2>>  Test2(List<TestDTO2> dtoParam,Double samplesNumber) {
		List<List<TestDTO2>>  reust = new ArrayList<List<TestDTO2>>();
		int a=1;
		int c=1;
		List<TestDTO2> d=null;
		for (int i = 0; i < dtoParam.size(); i++) {
			Double s =  dtoParam.get(i).getNum();
			StringBuffer   str=new StringBuffer(dtoParam.get(i).getNum()+"+");//用于控制台打印显示，和逻辑无关
			boolean bb=true;
			while(bb){
				if(bb=false){
					break;
				}
				if(dtoParam.size()==a){
					bb=false;
					break;
				}
				boolean b=true;
				while(b){
					if(dtoParam.size()==c){
						a++;
						b=false;
						c=a;
						break;
					}
					d = new ArrayList<TestDTO2>();
					d.add(dtoParam.get(i));
					for(int j=c;j<dtoParam.size();j++){
						s = s + dtoParam.get(j).getNum();
						d.add(dtoParam.get(j));
						str.append(dtoParam.get(j).getNum()+"+");//用于控制台打印显示，和逻辑无关
						System.out.println(str.substring(0,str.length()-1));//用于控制台打印显示，和逻辑无关
						if (s >=(samplesNumber-1)&&s <= samplesNumber) {
							reust.add(d);
							break;
						}
						if(dtoParam.size()-j==1){
							s =  dtoParam.get(i).getNum();
							str=new StringBuffer(dtoParam.get(i).getNum()+"+");//用于控制台打印显示，和逻辑无关
							c++;
							break;
						}
					}
				}
			}
		}
		return  reust;
	}

	public  static List<List<TestDTO2>>  Test3(List<TestDTO2> dtoParam,Double samplesNumber) {
		List<List<TestDTO2>>  reust = new ArrayList<List<TestDTO2>>();
		int a=1;
		int c=1;
		List<TestDTO2> d=null;
		for (int i = 0; i < dtoParam.size(); i++) {
			Double s = 0.0;
			for(int k1=0;k1<dtoParam.get(i).getNum().intValue();k1++) {
				s =  (k1+1)*dtoParam.get(i).getWidth();
				StringBuffer   str=new StringBuffer((k1+1)+"*"+dtoParam.get(i).getWidth()+"+");//用于控制台打印显示，和逻辑无关
				boolean bb=true;
				while(bb){
					if(bb=false){
						break;
					}
					if(dtoParam.size()==a){
						bb=false;
						break;
					}
					boolean b=true;
					while(b){
						if(dtoParam.size()==c){
							a++;
							b=false;
							c=a;
							break;
						}
						d = new ArrayList<TestDTO2>();
						d.add(dtoParam.get(i));
						for(int j=c;j<dtoParam.size();j++){
							s = s + dtoParam.get(j).getWidth();
							d.add(dtoParam.get(j));
							str.append(dtoParam.get(j).getWidth()+"+");//用于控制台打印显示，和逻辑无关
							System.out.println(str.substring(0,str.length()-1));//用于控制台打印显示，和逻辑无关
							if (s >=(samplesNumber-1)&&s <= samplesNumber) {
								reust.add(d);
								break;
							}
							if(dtoParam.size()-j==1){
								s =  dtoParam.get(i).getWidth();
								str=new StringBuffer(dtoParam.get(i).getWidth()+"+");//用于控制台打印显示，和逻辑无关
								c++;
								break;
							}
						}
					}
				}
			}
		}
		return  reust;
	}

	public static int getMin(Integer [] number) {
		//		Integer[] number = { 21, 43, 21, 32, 1, 2, 4, -1, 93, 5467, 38 };
		System.out.println(Arrays.asList(number));
		int min = Collections.min(Arrays.asList(number));
		return min;
	}

	public static int getMax(Integer [] number) {
		//		Integer[] number = { 21, 43, 21, 32, 1, 2, 4, -1, 93, 5467, 38 };
		System.out.println(Arrays.asList(number));
		int max = Collections.max(Arrays.asList(number));
		return max;
	}

	public static List<String> getDiffrent(List<String> list1, List<String> list2){           
		Map<String,Integer> map = new HashMap<String,Integer>(list1.size()+list2.size());
		List<String> diff = new ArrayList<String>();
		List<String> maxList = list1;
		List<String> minList = list2;
		if(list2.size()>list1.size()){
			maxList = list2;
			minList = list1;
		}

		for (String string : maxList){
			map.put(string, 1);                    
		}

		for (String string : minList){
			Integer cc = map.get(string);                    
			if(cc!=null){
				map.put(string, ++cc);
				continue;                    
			}           
			map.put(string, 1);                    
		}

		for(Map.Entry<String, Integer> entry:map.entrySet()){                    
			if(entry.getValue()==1)                    
			{                    
				diff.add(entry.getKey());                    
			}                    
		}                               
		return diff;                    
	}

	public static void main(String[] args) {
		//模拟一个数字集合
		List<TestDTO> l=new ArrayList<TestDTO>();
		//		for(int i=1;i<10;i++){
		//			TestDTO d=new TestDTO();
		//			d.setId(i+"");
		//			d.setNum(i);
		//			l.add(d);
		//		}
		TestDTO d=new TestDTO();
		d.setId(1+"");
		d.setNum(27);
		l.add(d);
		TestDTO d2=new TestDTO();
		d2.setId(2+"");
		d2.setNum(27);
		l.add(d2);
		TestDTO d3=new TestDTO();
		d3.setId(3+"");
		d3.setNum(27);
		l.add(d3);
		TestDTO d4=new TestDTO();
		d4.setId(4+"");
		d4.setNum(27);
		l.add(d4);

		TestDTO d9=new TestDTO();
		d9.setId(9+"");
		d9.setNum(27);
		l.add(d9);

		TestDTO d11=new TestDTO();
		d11.setId(11+"");
		d11.setNum(27);
		l.add(d11);

		TestDTO d5=new TestDTO();
		d5.setId(5+"");
		d5.setNum(28);
		l.add(d5);
		TestDTO d6=new TestDTO();
		d6.setId(6+"");
		d6.setNum(29);
		l.add(d6);
		TestDTO d7=new TestDTO();
		d7.setId(7+"");
		d7.setNum(26);
		l.add(d7);
		TestDTO d8=new TestDTO();
		d8.setId(8+"");
		d8.setNum(25);
		l.add(d8);

		TestDTO d10=new TestDTO();
		d10.setId(8+"");
		d10.setNum(25);
		l.add(d10);



		List<List<TestDTO>>  list=   Test(l,108);
		for (int i=0;i<list.size();i++){
			String str="";
			for(int j=0;j<list.get(i).size();j++){
				str=str+list.get(i).get(j).getNum()+"+";
			}
			System.out.println("第"+i+"个结果："+str.substring(0,str.length()-1));
		}

	}

}
